// run: $exec < input
// opt: 0
// flag: -g
#include <iostream>
#include <algorithm>
#include <string>

std::string s;
int l;

std::string work(int opt, std::string s)
{
	int tl = l, last_carry = 0, need_carry = opt;
	if (opt == 1) tl--;
	std::string ret(tl, '0');
	for (int i = 0; i <= tl - i - 1; i++) {
		bool conc = false;
		if (!last_carry && need_carry && s[i] == '9' && s[tl - i - 1] == '0') conc = true;
		if (!last_carry && need_carry && s[i] == '9' && s[tl - i - 1] != '0') return "";
		if (s[i] != '0') s[i] -= last_carry;
		else if (last_carry) s[i] = '9';

		if (!need_carry) {
			if (i != tl - i - 1) {
				ret[i] = '0';
				ret[tl - i - 1] = s[i];
			} else {
				if ((s[i] - '0') & 1) return "";
				ret[i] = ret[tl - i - 1] = (s[i] - '0') / 2 + '0';
			}
		} else {
			if (i != tl - i - 1) {
				ret[i] = '9';
				ret[tl - i - 1] = s[i] == '9' ? '0' : s[i] + 1;
			} else {
				if ((s[i] - '0') & 1) return "";
				ret[i] = ret[tl - i - 1] = (s[i] - '0') / 2 + '5';
			}
		}

		int tneed = need_carry;
		int hcarry = need_carry;
		if (s[i] == '9' && last_carry) need_carry = 1;
		last_carry = need_carry;
		if (conc) last_carry = 0;
		if (s[i] == '9' && s[tl - i - 1] == '0') hcarry = 1;
		if (tneed != hcarry) return "";
		char ch = s[tl - i - 1];
		if (s[tl - i - 1] == '0' && s[i] == '9') ch = '9' + 1;
		if (ch < s[i] || s[tl - i - 1] > s[i] + 1) return "";
		if (ch > s[i] || (i == tl - i - 1 && last_carry) || conc)
			need_carry = 1;
		else
			need_carry = 0;

		if (i == (tl - 1) / 2)
			if (last_carry != need_carry) return "";
	}
	std::reverse(ret.begin(), ret.end());
	while (ret[0] == '0' && ret.size() > 1)
		ret.erase(0);
	return ret;
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> s;
	l = s.size();
	std::reverse(s.begin(), s.end());
	std::string ans = work(0, s);
	if (!ans.empty()) std::cout << ans << '\n';
	else if (s[l - 1] == '1') {
		ans = work(1, s);
		if (!ans.empty()) std::cout << ans << '\n';
		else std::cout << "0\n";
	} else
		std::cout << "0\n";
}

